package com.ausgabenandroid;

import android.os.Bundle;
import android.app.Dialog;
import android.app.TabActivity;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ImageView;
import android.widget.TabHost;
import java.util.ArrayList;
import java.util.List;
import java.util.Calendar;
import android.widget.Spinner;
import java.io.*;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import java.util.Vector;
import android.widget.AdapterView.OnItemSelectedListener;
import android.util.DisplayMetrics;
import android.widget.FrameLayout;
import android.widget.TableLayout;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import android.app.*;
import android.content.Context;
import android.app.DatePickerDialog.OnDateSetListener;
import android.content.DialogInterface;
import android.os.Message;
import android.os.Handler;
import android.widget.LinearLayout;
import android.content.DialogInterface.OnClickListener;

public class AusgabenAndroid extends TabActivity
{
	private void datenSpeichern()
	{
		try
		{
			FileOutputStream fos = openFileOutput("daten.dat", MODE_PRIVATE);
			BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fos));
			for(int count = 0; count < mGesamteHistorie.size(); count++)
			{
				AusgabeHistorie objAusgabeHistorie = mGesamteHistorie.get(count);

				out
				      .write(new Float(objAusgabeHistorie.getBetrag()).toString(),
				            0, new Float(objAusgabeHistorie.getBetrag()).toString()
				                  .length());
				out.newLine();
				out.write(objAusgabeHistorie.getKathegorie(), 0, objAusgabeHistorie
				      .getKathegorie().length());
				out.newLine();
				out.write(objAusgabeHistorie.getKommentar(), 0, objAusgabeHistorie
				      .getKommentar().length());
				out.newLine();
				out.write(new Integer(objAusgabeHistorie.getTag()).toString(), 0,
				      new Integer(objAusgabeHistorie.getTag()).toString().length());
				out.newLine();
				out.write(new Integer(objAusgabeHistorie.getMonat()).toString(), 0,
				      new Integer(objAusgabeHistorie.getMonat()).toString()
				            .length());
				out.newLine();
				out
				      .write(new Integer(objAusgabeHistorie.getJahr()).toString(),
				            0, new Integer(objAusgabeHistorie.getJahr()).toString()
				                  .length());
				out.newLine();
			}

			out.close();
		} catch(IOException ex)
		{
		}
	}

	private void datenLesen()
	{
		try
		{
			FileInputStream fis = openFileInput("daten.dat");
			BufferedReader in = new BufferedReader(new InputStreamReader(fis));
			String betragStr = "";
			while(null != (betragStr = in.readLine()))
			{
				AusgabeHistorie objAusgabeHistorie = new AusgabeHistorie();
				float betrag = new Float(betragStr).floatValue();
				objAusgabeHistorie.setBetrag(betrag);
				objAusgabeHistorie.setKathegorie(in.readLine());
				objAusgabeHistorie.setKommentar(in.readLine());
				objAusgabeHistorie.setTag(new Integer(in.readLine()).intValue());
				objAusgabeHistorie.setMonat(new Integer(in.readLine()).intValue());
				objAusgabeHistorie.setJahr(new Integer(in.readLine()).intValue());
				mGesamteHistorie.add(objAusgabeHistorie);
			}
			in.close();
		} catch(FileNotFoundException ex)
		{
		} catch(Exception ex)
		{
			System.out.println(ex);
		}

		fuelleHistorie();
		fuelleUeberischtListe();
	}

	private void setzeGesamtbetrag()
	{
		Float betragGesamt = new Float(new Float(
		      (((int) (mGesamtAusgabe * 100)) / 100.0)).toString());
		mGesamtAusgabeView.setText(betragGesamt.toString() + " Euro");
	}

	private void fuelleHistorie()
	{
		adapter.clear();
		mGesamtAusgabe = 0.0f;
		for(int count = 0; count < mGesamteHistorie.size(); count++)
		{
			AusgabeHistorie ausgabeHistorie = mGesamteHistorie.get(count);
			if((ausgabeHistorie.getMonat() == mAngezeigterMonat)
			      && (ausgabeHistorie.getJahr() == mAngezeigtesJahr))
			{
				mGesamtAusgabe = mGesamtAusgabe + ausgabeHistorie.getBetrag();
				adapter.add(ausgabeHistorie);
			}
		}
		setzeGesamtbetrag();
	}

	void zeigeToast(String text)
	{
		Toast toast = Toast.makeText(selfRef, text, Toast.LENGTH_SHORT);
		toast.setGravity(0, 0, 0);
		toast.show();
	}

	private void zeigeDialog(String titel, String meldung)
	{
		mDialog = new Dialog(this);
		mDialog.setTitle(titel);
		mDialog.setContentView(R.layout.dialog);
		TextView text = (TextView) mDialog.findViewById(R.id.DialogText);
		text.setText(meldung);
		mDialog.show();
		Button ok = (Button) mDialog.findViewById(R.id.DialogOK);
		ok.setOnClickListener(onDialogOk);
	}

	private View.OnClickListener onDialogOk = new View.OnClickListener()
	{
		public void onClick(View v)
		{
			mDialog.dismiss();
		}
	};

	private void zeigeDatumDialog()
	{

		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Datum");

		builder.setPositiveButton("OK", onDatumOkListener);		
		datePicker = new DatePicker(this);
		builder.setView(datePicker);

		builder.show();
	}

	private DialogInterface.OnClickListener onDatumOkListener = new DialogInterface.OnClickListener()
	{
		public void onClick(DialogInterface dialog, int which)
		{
			
			mAktuellerMonat = datePicker.getMonth();
			mAktuellerMonat++;
			mAktuellerTag = datePicker.getDayOfMonth();
			mAktuellesJahr = datePicker.getYear();

			mAktuellesDatum.setText(new Integer(mAktuellerTag).toString() + "."
			      + new Integer(mAktuellerMonat).toString() + "."
			      + new Integer(mAktuellesJahr).toString());
		}
	};
	
	private void zeigeHilfe()
	{
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Hilfe");

		builder.setPositiveButton("OK", null);

		TextView hilfeText = new TextView(this);
		hilfeText.setBackgroundColor(0xFFFFFFFF);
		hilfeText
		      .setText("Die Applikation protokolliert alle Ausgaben."
		            + System.getProperty("line.separator")
		            + "Im Reiter Ausgabe kann eine neue Ausgabe eingegeben werden."
		            + System.getProperty("line.separator")
		            + "Die Ausgabe erscheint in der Liste im Reiter Historie."
		            + System.getProperty("line.separator")
		            + "In der Übersicht wird ein Histogramm über alle Ausgaben angezeigt."
		            + System.getProperty("line.separator")
		            + "In der Übersicht und in der Historie erscheinen nur die Ausgaben eines Monats. In der Regel werden die Ausgaben des aktuellen Monats angezeigt. Der angezeigte Monat kann im Menü Einstellungen geändert werden um z.B. die Ausgaben des vorherigen Monats anzuschauen.");
		builder.setView(hilfeText);

		builder.show();
	}

	private View.OnClickListener onHilfeOk = new View.OnClickListener()
	{
		public void onClick(View v)
		{
			mDialogHilfe.dismiss();
		}
	};

	private void zeigeAngezeigterMonat()
	{
		Calendar heute = Calendar.getInstance();
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Angezeigter Monat");
		// builder.setMessage(message);
		builder.setPositiveButton("OK", null);
		builder
		      .setMessage("Bitte wählen Sie den Monat aus, der in der Übersicht und Historie angezeigt werden soll.");

		Spinner monateSpinner = new Spinner(this);
		ArrayAdapter adapterArray = ArrayAdapter.createFromResource(this,
		      R.array.MonateItems, android.R.layout.simple_spinner_item);
		adapterArray
		      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		monateSpinner.setAdapter(adapterArray);

		monateSpinner.setSelection(heute.get(Calendar.MONTH));

		monateSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
		{
			public void onItemSelected(AdapterView parent, View v, int position,
			      long id)
			{
				switch(position)
				{
				case 0:
					mAngezeigterMonat = 1;
					break;
				case 1:
					mAngezeigterMonat = 2;
					break;
				case 2:
					mAngezeigterMonat = 3;
					break;
				case 3:
					mAngezeigterMonat = 4;
					break;
				case 4:
					mAngezeigterMonat = 5;
					break;
				case 5:
					mAngezeigterMonat = 6;
					break;
				case 6:
					mAngezeigterMonat = 7;
					break;
				case 7:
					mAngezeigterMonat = 8;
					break;
				case 8:
					mAngezeigterMonat = 9;
					break;
				case 9:
					mAngezeigterMonat = 10;
					break;
				case 10:
					mAngezeigterMonat = 11;
					break;
				case 11:
					mAngezeigterMonat = 12;
					break;
				default:
					mAngezeigterMonat = 1;
				}

				fuelleHistorie();
				fuelleUeberischtListe();
				setzeGesamtbetrag();
			}

			public void onNothingSelected(AdapterView arg0)
			{
			}
		});

		Spinner jahreSpinner = new Spinner(this);
		adapterArray = ArrayAdapter.createFromResource(this, R.array.JahreItems,
		      android.R.layout.simple_spinner_item);
		adapterArray
		      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		jahreSpinner.setAdapter(adapterArray);

		int selektionJahr = heute.get(Calendar.YEAR) - 2000;
		if((selektionJahr >= 0) && (selektionJahr < adapterArray.getCount()))
		{
			jahreSpinner.setSelection(selektionJahr);
		}

		jahreSpinner.setOnItemSelectedListener(new OnItemSelectedListener()
		{
			public void onItemSelected(AdapterView parent, View v, int position,
			      long id)
			{
				mAngezeigtesJahr = position + 2000;
				// System.out.println("JAHR " + mAngezeigtesJahr);
				fuelleHistorie();
				fuelleUeberischtListe();
				setzeGesamtbetrag();
			}

			public void onNothingSelected(AdapterView arg0)
			{
			}
		});

		LinearLayout layout = new LinearLayout(this);
		layout.setOrientation(LinearLayout.VERTICAL);
		layout.addView(monateSpinner);
		layout.addView(jahreSpinner);

		builder.setView(layout);

		builder.show();

	}

	private void zeigeListeMonate()
	{
		ListView listeMonate = new ListView(this);

		// //////////////////////

		AlertDialog.Builder builder = new AlertDialog.Builder(this);

		builder.setPositiveButton("OK", null);
		builder.setTitle("Liste Monate");

		builder.setView(listeMonate);

		builder.show();

		// //////////////////////

		Vector<String> ausgabenVector = new Vector<String>();

		Vector<ListeMonateEintrag> ausgabenMonateVector = new Vector<ListeMonateEintrag>();

		for(int count = 0; count < mGesamteHistorie.size(); count++)
		{
			AusgabeHistorie ausgabeHistorie = mGesamteHistorie.get(count);

			boolean elementGefunden = false;
			for(int countAusgabenMonate = 0; countAusgabenMonate < ausgabenMonateVector
			      .size(); countAusgabenMonate++)
			{
				ListeMonateEintrag monateEintrag = ausgabenMonateVector
				      .get(countAusgabenMonate);
				if((monateEintrag.getJahr() == ausgabeHistorie.getJahr())
				      && (monateEintrag.getMonat() == ausgabeHistorie.getMonat()))
				{
					// Element gefunden -> addiere
					monateEintrag.addiereBetrag(ausgabeHistorie.getBetrag());
					elementGefunden = true;
				}
			}
			if(false == elementGefunden)
			{
				// Element nicht gefunden -> erzeuge neuen Eintrag
				ListeMonateEintrag monateEintrag = new ListeMonateEintrag();
				monateEintrag.setJahr(ausgabeHistorie.getJahr());
				monateEintrag.setMonat(ausgabeHistorie.getMonat());
				monateEintrag.setSumme(ausgabeHistorie.getBetrag());
				ausgabenMonateVector.add(monateEintrag);
			}
		}

		// Sortiere Liste (linear muss optimiert werden!!!)
		if(ausgabenMonateVector.size() > 1)
		{
			for(int countOben = 0; countOben < ausgabenMonateVector.size(); countOben++)
			{
				for(int count = 0; count < (ausgabenMonateVector.size() - 1); count++)
				{
					ListeMonateEintrag erstes = ausgabenMonateVector.get(count);
					ListeMonateEintrag zweites = ausgabenMonateVector.get(count + 1);

					boolean tausche = false;
					if(erstes.getJahr() < zweites.getJahr())
					{
						tausche = true;
					}
					if((erstes.getJahr() == zweites.getJahr())
					      && (erstes.getMonat() < zweites.getMonat()))
					{
						tausche = true;
					}

					if(tausche)
					{
						ListeMonateEintrag buffer = new ListeMonateEintrag();
						buffer.setJahr(zweites.getJahr());
						buffer.setMonat(zweites.getMonat());
						buffer.setSumme(zweites.getSumme());

						zweites.setJahr(erstes.getJahr());
						zweites.setMonat(erstes.getMonat());
						zweites.setSumme(erstes.getSumme());

						erstes.setJahr(buffer.getJahr());
						erstes.setMonat(buffer.getMonat());
						erstes.setSumme(buffer.getSumme());
					}
				}
			}
		}

		for(int count = 0; count < ausgabenMonateVector.size(); count++)
		{
			ListeMonateEintrag monateEintrag = ausgabenMonateVector.get(count);

			String monat = "";
			switch(monateEintrag.getMonat())
			{
			case 1:
				monat = "Januar";
				break;
			case 2:
				monat = "Februar";
				break;
			case 3:
				monat = "März";
				break;
			case 4:
				monat = "April";
				break;
			case 5:
				monat = "Mai";
				break;
			case 6:
				monat = "Juni";
				break;
			case 7:
				monat = "Juli";
				break;
			case 8:
				monat = "August";
				break;
			case 9:
				monat = "September";
				break;
			case 10:
				monat = "Oktober";
				break;
			case 11:
				monat = "November";
				break;
			case 12:
				monat = "Dezember";
				break;
			default:
				monat = "Monat ungültig";
			}
			ausgabenVector.add(monat
			      + " "
			      + new Integer(monateEintrag.getJahr()).toString()
			      + " "
			      + new Float(((int) (monateEintrag.getSumme() * 100)) / 100.0)
			            .toString() + " Euro");
		}

		listeMonate.setAdapter(new ArrayAdapter<String>(this,
		      android.R.layout.simple_list_item_1, ausgabenVector));

		// Button ok = (Button) mListeMonate.findViewById(R.id.ListeMonateOK);
		// ok.setOnClickListener(onListeMonateOk);

	}

	/*
	 * private View.OnClickListener onListeMonateOk = new View.OnClickListener()
	 * { public void onClick(View v) { mListeMonate.dismiss(); } };
	 */
	private void fuelleUeberischtListe()
	{
		AusgabeHistorie ausgabeHistorie = null;
		adapterUebersicht.clear();
		CharSequence[] katehgorienStrings = getResources().getTextArray(
		      R.array.KategorieItems);

		float gesamt = 0.0f;
		float[] kathegorienSummen = new float[katehgorienStrings.length];

		for(int count = 0; count < katehgorienStrings.length; count++)
		{
			kathegorienSummen[count] = 0.0f;
		}

		for(int count = 0; count < modelHistorie.size(); count++)
		{
			ausgabeHistorie = modelHistorie.get(count);

			for(int countKantegorien = 0; countKantegorien < katehgorienStrings.length; countKantegorien++)
			{
				if(ausgabeHistorie.getKathegorie().equals(
				      (String) katehgorienStrings[countKantegorien]))
					kathegorienSummen[countKantegorien] = kathegorienSummen[countKantegorien]
					      + ausgabeHistorie.getBetrag();
			}
		}

		for(int count = 0; count < katehgorienStrings.length; count++)
		{
			gesamt = gesamt + kathegorienSummen[count];
		}

		for(int count = 0; count < katehgorienStrings.length; count++)
		{
			if(kathegorienSummen[count] != 0.0f)
			{
				AusgabeUebersicht ausgabeUebersicht = new AusgabeUebersicht();
				ausgabeUebersicht.setKathegorie((String) katehgorienStrings[count]);
				ausgabeUebersicht.setProzent(new Float((100.0f / gesamt)
				      * kathegorienSummen[count]).floatValue());
				adapterUebersicht.add(ausgabeUebersicht);
			}
		}

	}

	protected void onDestroy()
	{
		super.onDestroy();
		datenSpeichern();
	}

	List<AusgabeHistorie> modelHistorie = new ArrayList<AusgabeHistorie>();
	List<AusgabeUebersicht> modelUeberischt = new ArrayList<AusgabeUebersicht>();
	AusgabenAdapterHistorie adapter = null;
	AusgabenAdapterUebersicht adapterUebersicht = null;
	EditText mPreis = null;
	EditText mKommentar = null;
	int mAngezeigterMonat = 0;
	int mAngezeigtesJahr = 0;
	Spinner mKategorien = null;
	TextView mGesamtAusgabeView = null;
	float mGesamtAusgabe = 0.0f;
	Vector<AusgabeHistorie> mGesamteHistorie;
	Dialog mDialogHilfe = null;

	Dialog mDialog = null;
	int mAktuellerTag = 0;
	int mAktuellerMonat = 0;
	int mAktuellesJahr = 0;
	Button mAktuellesDatum = null;
	ImageView imageKategorie = null;
	Context selfRef = null;
	DatePickerDialog datePickerDialog = null;
	DatePickerDialog dateAngezeigterMonatDialog = null;
	DatePicker datePicker = null;

	public boolean onCreateOptionsMenu(Menu menu)
	{
		super.onCreateOptionsMenu(menu);
		new MenuInflater(this).inflate(R.menu.menu, menu);
		return true;
	}

	public boolean onOptionsItemSelected(MenuItem item)
	{
		super.onOptionsItemSelected(item);
		switch(item.getItemId())
		{
		case R.id.men_monate:
			zeigeListeMonate();
			break;
		case R.id.men_ende:
			finish();
			break;
		case R.id.men_angezeigter_monat:
			zeigeAngezeigterMonat();
			break;
		case R.id.men_hilfe:
			zeigeHilfe();
			break;
		case R.id.men_loesche_letzte_ausgabe:
			Vector<AusgabeHistorie> buffer = new Vector<AusgabeHistorie>();

			for(int count = 0; count < (mGesamteHistorie.size() - 1); count++)
			{
				buffer.add(mGesamteHistorie.get(count));
			}

			mGesamteHistorie.clear();

			for(int count = 0; count < buffer.size(); count++)
			{
				mGesamteHistorie.add(buffer.get(count));
			}

			fuelleHistorie();
			fuelleUeberischtListe();
			setzeGesamtbetrag();

			zeigeToast("Letzte Ausgabe gelöscht...");
			break;
		case R.id.men_loesche_monat:

			/*
			 * EditText einstellungenMonat = (EditText) mDialogEinstellungen
			 * .findViewById(R.id.EinstellungenMonat); EditText einstellungenJahr =
			 * (EditText) mDialogEinstellungen
			 * .findViewById(R.id.EinstellungenJahr);
			 * 
			 * 
			 * Vector<AusgabeHistorie> gesamtHistorieBuffer = new
			 * Vector<AusgabeHistorie>();
			 * 
			 * for(int count = 0; count < mGesamteHistorie.size(); count++) {
			 * if((mGesamteHistorie.get(count).getMonat() == new Integer(
			 * einstellungenMonat.getText().toString()).intValue()) &&
			 * (mGesamteHistorie.get(count).getJahr() == new Integer(
			 * einstellungenJahr.getText().toString()).intValue())) { // nicht
			 * aufnehmen } else {
			 * gesamtHistorieBuffer.add(mGesamteHistorie.get(count)); } }
			 * mGesamteHistorie.clear(); for(int count = 0; count <
			 * gesamtHistorieBuffer.size(); count++) {
			 * mGesamteHistorie.add(gesamtHistorieBuffer.get(count)); }
			 * fuelleHistorie(); fuelleUeberischtListe(); setzeGesamtbetrag();
			 * 
			 * zeigeToast("Alle Ausgaben des angezeigten Monates gelöscht...");
			 */
			break;
		case R.id.men_loesche_alles:
			mGesamteHistorie.clear();

			mGesamtAusgabe = 0.0f;
			Float betragGesamt = new Float(mGesamtAusgabe);
			mGesamtAusgabeView.setText(betragGesamt.toString() + " Euro");

			adapter.clear();
			fuelleUeberischtListe();
			setzeGesamtbetrag();

			zeigeToast("Alle Ausgaben gelöscht...");
			break;
		}
		return true;
	}

	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		selfRef = this;

		Button save = (Button) findViewById(R.id.save);
		save.setOnClickListener(onSave);

		mGesamteHistorie = new Vector<AusgabeHistorie>();

		mGesamtAusgabeView = (TextView) findViewById(R.id.AusgabeMonat);
		mPreis = (EditText) findViewById(R.id.Preis);

		mKommentar = (EditText) findViewById(R.id.addr);

		imageKategorie = (ImageView) findViewById(R.id.KategorieImage);
		imageKategorie.setImageResource(R.drawable.andere);

		ListView list = (ListView) findViewById(R.id.restaurants);

		adapter = new AusgabenAdapterHistorie(this, modelHistorie);
		list.setAdapter(adapter);

		ListView listUebersicht = (ListView) findViewById(R.id.UebersichtList);

		adapterUebersicht = new AusgabenAdapterUebersicht(this, modelUeberischt,
		      this);
		listUebersicht.setAdapter(adapterUebersicht);

		// DisplayMetrics displayMetrics = new DisplayMetrics();
		// getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);

		TableLayout tableLayoutDetails = (TableLayout) findViewById(R.id.details);
		tableLayoutDetails.setPadding(0, 0, 0, 0);
		list.setPadding(0, 0, 0, 0);
		listUebersicht.setPadding(0, 0, 0, 0);

		TabHost.TabSpec spec = getTabHost().newTabSpec("tag1");

		spec.setContent(R.id.details);
		spec.setIndicator("Ausgabe");
		getTabHost().addTab(spec);

		spec = getTabHost().newTabSpec("tag2");

		spec.setContent(R.id.UebersichtList);
		spec.setIndicator("Übersicht"/*
												 * , getResources().getDrawable(
												 * R.drawable.uebersicht)
												 */);
		getTabHost().addTab(spec);

		spec = getTabHost().newTabSpec("tag3");
		spec.setContent(R.id.restaurants);
		spec.setIndicator("Historie");
		getTabHost().addTab(spec);

		getTabHost().setCurrentTab(0);

		list.setOnItemClickListener(onListClick);

		// Aktuelles Datum setzen
		Calendar today = Calendar.getInstance();
		mAktuellerMonat = today.get(Calendar.MONTH);
		mAktuellerMonat++;
		mAktuellerTag = today.get(Calendar.DAY_OF_MONTH);
		mAktuellesJahr = today.get(Calendar.YEAR);

		mAktuellesDatum = (Button) findViewById(R.id.AktuellesDatum);
		mAktuellesDatum.setText(new Integer(mAktuellerTag).toString() + "."
		      + new Integer(mAktuellerMonat).toString() + "."
		      + new Integer(mAktuellesJahr).toString());
		mAktuellesDatum.setOnClickListener(onDatum);

		mAngezeigterMonat = mAktuellerMonat;
		mAngezeigtesJahr = mAktuellesJahr;

		mKategorien = (Spinner) findViewById(R.id.SpinnerKategorie);
		ArrayAdapter adapterArray = ArrayAdapter.createFromResource(this,
		      R.array.KategorieItems, android.R.layout.simple_spinner_item);
		adapterArray
		      .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		mKategorien.setAdapter(adapterArray);

		mKategorien.setOnItemSelectedListener(new OnItemSelectedListener()
		{
			public void onItemSelected(AdapterView parent, View v, int position,
			      long id)
			{
				switch(position)
				{
				case 0:
					imageKategorie.setImageResource(R.drawable.andere);
					break;
				case 1:
					imageKategorie.setImageResource(R.drawable.arzt);
					break;
				case 2:
					imageKategorie.setImageResource(R.drawable.ausflug);
					break;
				case 3:
					imageKategorie.setImageResource(R.drawable.ausgehen);
					break;
				case 4:
					imageKategorie.setImageResource(R.drawable.auto);
					break;
				case 5:
					imageKategorie.setImageResource(R.drawable.betriebskosten);
					break;
				case 6:
					imageKategorie.setImageResource(R.drawable.buch);
					break;
				case 7:
					imageKategorie.setImageResource(R.drawable.elektronik);
					break;
				case 8:
					imageKategorie.setImageResource(R.drawable.essen);
					break;
				case 9:
					imageKategorie.setImageResource(R.drawable.fahrrad);
					break;
				case 10:
					imageKategorie.setImageResource(R.drawable.fastfoot);
					break;
				case 11:
					imageKategorie.setImageResource(R.drawable.freizeit);
					break;
				case 12:
					imageKategorie.setImageResource(R.drawable.fruestuecken);
					break;
				case 13:
					imageKategorie.setImageResource(R.drawable.garten);
					break;
				case 14:
					imageKategorie.setImageResource(R.drawable.genussmittel);
					break;
				case 15:
					imageKategorie.setImageResource(R.drawable.geschenk);
					break;
				case 16:
					imageKategorie.setImageResource(R.drawable.getraenke);
					break;
				case 17:
					imageKategorie.setImageResource(R.drawable.gez);
					break;
				case 18:
					imageKategorie.setImageResource(R.drawable.haushalt);
					break;
				case 19:
					imageKategorie.setImageResource(R.drawable.haustier);
					break;
				case 20:
					imageKategorie.setImageResource(R.drawable.hobby);
					break;
				case 21:
					imageKategorie.setImageResource(R.drawable.kaffe);
					break;
				case 22:
					imageKategorie.setImageResource(R.drawable.kind);
					break;
				case 23:
					imageKategorie.setImageResource(R.drawable.kino);
					break;
				case 24:
					imageKategorie.setImageResource(R.drawable.kosmetik);
					break;
				case 25:
					imageKategorie.setImageResource(R.drawable.kleidung);
					break;
				case 26:
					imageKategorie.setImageResource(R.drawable.kredit);
					break;
				case 27:
					imageKategorie.setImageResource(R.drawable.lebensmittel);
					break;
				case 28:
					imageKategorie.setImageResource(R.drawable.medikament);
					break;
				case 29:
					imageKategorie.setImageResource(R.drawable.moebel);
					break;
				case 30:
					imageKategorie.setImageResource(R.drawable.motorrad);
					break;
				case 31:
					imageKategorie.setImageResource(R.drawable.musik);
					break;
				case 32:
					imageKategorie.setImageResource(R.drawable.partner);
					break;
				case 33:
					imageKategorie.setImageResource(R.drawable.post);
					break;
				case 34:
					imageKategorie.setImageResource(R.drawable.schreibzeug);
					break;
				case 35:
					imageKategorie.setImageResource(R.drawable.schule);
					break;
				case 36:
					imageKategorie.setImageResource(R.drawable.spende);
					break;
				case 37:
					imageKategorie.setImageResource(R.drawable.sport);
					break;
				case 38:
					imageKategorie.setImageResource(R.drawable.strom);
					break;
				case 39:
					imageKategorie.setImageResource(R.drawable.tanken);
					break;
				case 40:
					imageKategorie.setImageResource(R.drawable.telefon);
					break;
				case 41:
					imageKategorie.setImageResource(R.drawable.theater);
					break;
				case 42:
					imageKategorie.setImageResource(R.drawable.urlaub);
					break;
				case 43:
					imageKategorie.setImageResource(R.drawable.verkehrsmittel);
					break;
				case 44:
					imageKategorie.setImageResource(R.drawable.waschsachen);
					break;
				case 45:
					imageKategorie.setImageResource(R.drawable.wasser);
					break;
				case 46:
					imageKategorie.setImageResource(R.drawable.werkzeug);
					break;
				case 47:
					imageKategorie.setImageResource(R.drawable.wohnung);
					break;
				case 48:
					imageKategorie.setImageResource(R.drawable.zeitung);
					break;
				default:
					imageKategorie.setImageResource(R.drawable.andere);
				}
			}

			public void onNothingSelected(AdapterView arg0)
			{

			}
		});

		datenLesen();

		fuelleUeberischtListe();

	}

	private View.OnClickListener onSave = new View.OnClickListener()
	{
		public void onClick(View v)
		{
			Float betrag = null;
			boolean betragOk = true;
			try
			{
				betrag = new Float(mPreis.getText().toString());
				if(betrag.floatValue() == 0.0f)
				{
					betragOk = false;
				}
			} catch(Exception e)
			{
				betragOk = false;
			}

			Float betragZweiNachkommastellen = null;
			if(betragOk)
			{
				betragZweiNachkommastellen = new Float(new Float((((int) (betrag
				      .floatValue() * 100)) / 100.0)).toString());
				if(betragZweiNachkommastellen.floatValue() == 0.0f)
				{
					betragOk = false;
				}
			}

			if(betragOk)
			{
				AusgabeHistorie r = new AusgabeHistorie();
				r.setKommentar(mKommentar.getText().toString());

				r.setBetrag(betragZweiNachkommastellen.floatValue());

				CharSequence[] strings = getResources().getTextArray(
				      R.array.KategorieItems);
				r.setKathegorie((String) strings[mKategorien
				      .getSelectedItemPosition()]);

				r.setTag(new Integer(mAktuellerTag).intValue());
				r.setMonat(new Integer(mAktuellerMonat).intValue());
				r.setJahr(new Integer(mAktuellesJahr).intValue());

				mGesamteHistorie.add(r);

				mPreis.setText("");
				mKommentar.setText("");
				mKategorien.setSelection(0);

				Calendar today = Calendar.getInstance();
				mAktuellerMonat = today.get(Calendar.MONTH);
				mAktuellerMonat++;
				mAktuellerTag = today.get(Calendar.DAY_OF_MONTH);
				mAktuellesJahr = today.get(Calendar.YEAR);

				mAktuellesDatum.setText(new Integer(mAktuellerTag).toString() + "."
				      + new Integer(mAktuellerMonat).toString() + "."
				      + new Integer(mAktuellesJahr).toString());

				fuelleHistorie();
				fuelleUeberischtListe();

			} else
			{
				zeigeToast("Betrag ungültig!");
				mPreis.setText("");
			}
		}
	};

	private AdapterView.OnItemClickListener onListClick = new AdapterView.OnItemClickListener()
	{
		public void onItemClick(AdapterView<?> parent, View view, int position,
		      long id)
		{
			AusgabeHistorie ausgabeHistorie = modelHistorie.get(position);

			mPreis.setText(new Float(ausgabeHistorie.getBetrag()).toString());

			CharSequence[] kathegorieStrings = getResources().getTextArray(
			      R.array.KategorieItems);
			for(int count = 0; count < kathegorieStrings.length; count++)
			{
				if(kathegorieStrings[count].equals(ausgabeHistorie.getKathegorie()))
				{
					mKategorien.setSelection(count);
				}
			}
			mKommentar.setText(ausgabeHistorie.getKommentar());
			getTabHost().setCurrentTab(0);
		}
	};

	private View.OnClickListener onDatum = new View.OnClickListener()
	{
		public void onClick(View v)
		{
			zeigeDatumDialog();
		}
	};
}
